<?php
namespace Menory\Unit\Validation;

class ValidationRule {

    static $regular = [
        'email'    => '/^[\w-\.]+@[\w-]+(\.(\w)+)*(\.(\w){2,4})$/',             // 邮箱
        'mobile'   => '/\d{11}/',//'/^(?:13\d|15\d|18\d)-?\d{5}(\d{3}|\*{3})$/',             // 手机号码
        'tel'      => '/^((0\d{2,3})-)(\d{7,8})(-(\d{1,4}))?$/',                // 固定电话带分机号
        'phone'    => '/^\d{3}-?\d{8}|\d{4}-?\d{7}$/',                          // 固定电话不带分机号
        'domain'   => '/@([0-9a-z-_]+.)+[0-9a-z-_]+$/i',                        // 域名
        'date'     => '/^[1-9][0-9][0-9][0-9]-[0-9]{1,2}-[0-9]{1,2}$/',         // 日期
        'datetime' => '/^[1-9][0-9][0-9][0-9]-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}(:[0-9]{1,2}){1,2}$/',  // 日期时间
        'time'     => '/^[0-9]{1,2}(:[0-9]{1,2}){1,2}$/',                       // 时间
        /*--------- 数字类型 ---------*/
        'int'      => '/^\d{1,11}$/',                                           // 十进制整数
        'hex'      => '/^0x[0-9a-f]+$/i',                                       // 16进制整数
        'bin'      => '/^[01]+$/',                                              // 二进制
        'oct'      => '/^0[1-7]*[0-7]+$/',                                      // 8进制
        'float'    => '/^\d+\.[0-9]+$/',                                        // 浮点型
        /*--------- 字符串类型 ---------*/
        'chinese'  => '/^[\x{4e00}-\x{9fa5}]+$/u',                              // utf-8中文字符串
        /*--------- 常用类型 ---------*/
        'english'  => '/^[a-z0-9_\.]+$/i',                                      // 英文
        'nickname' => '/^[\x{4e00}-\x{9fa5}a-z_\.]+$/ui',                       // 昵称，可以带英文字符和数字
        'realname' => '/^[\x{4e00}-\x{9fa5}]+$/u',                              // 真实姓名
        'password' => '/^[a-z0-9]{6,32}$/i',                                    // 密码
        'area'     => '/^0\d{2,3}$/',                                           // 区号
        'version'  => '/^\d+\.\d+\.\d+$/',                                      // 版本号
        'url'      => '((https?)://(\S*?\.\S*?))([\s)\[\]{},;"\':<]|\.\s|$)',   // URL
    ];

    /**
     * @param $input
     * @param $regularType
     * @return array
     */
    public function validate($input, $regularType) {

        $regular = $regularType;
        if (isset(self::$regular[$regularType])) {
            $regular = self::$regular[$regularType];
        }
        $n = preg_match($regular, $input, $match);
        if ($n === 0) {
            return [null, new ValidationError("格式不正确")];
        }
        return [$match[0], null];

    }

}